package com.ojn.gexf4j.core; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.xml.sax.SAXException; import com.ojn.gexf4j.core.testgraphs.BasicGraphBuilder; import com.ojn.gexf4j.core.testgraphs.DataGraphBuilder; import com.ojn.gexf4j.core.testgraphs.DynamicGraphBuilder; import com.ojn.gexf4j.core.testgraphs.GexfBuilder; import com.ojn.gexf4j.core.testgraphs.HierarchyInlineBuilder; import com.ojn.gexf4j.core.testgraphs.HierarchyPIDBuilder; import com.ojn.gexf4j.core.testgraphs.PhylogenyBuilder; import com.ojn.gexf4j.core.testgraphs.VisualizationBuilder; @RunWith(Parameterized.class) public abstract class GraphWriterTest { protected abstract String getFileNamePrefix(); protected abstract GexfWriter newGraphWriter(); protected GexfBuilder builder = null; @Parameters public static List<Object[]> getData() { List<Object[]> rv = new ArrayList<Object[]>(); rv.add(new GexfBuilder[] { new BasicGraphBuilder() }); rv.add(new GexfBuilder[] { new DataGraphBuilder() }); rv.add(new GexfBuilder[] { new DynamicGraphBuilder() }); rv.add(new GexfBuilder[] { new HierarchyInlineBuilder() }); rv.add(new GexfBuilder[] { new HierarchyPIDBuilder() }); rv.add(new GexfBuilder[] { new PhylogenyBuilder() }); rv.add(new GexfBuilder[] { new VisualizationBuilder() }); return rv; } public GraphWriterTest(GexfBuilder builder) { this.builder = builder; } @Test public void writeToStream() throws SAXException, IOException { Gexf gexf = builder.buildGexf(); GexfWriter gw = newGraphWriter(); String fileName = "target/" + getFileNamePrefix() + "_" + builder.getSuffix() + ".gexf"; File f = new File(fileName); FileOutputStream fos = new FileOutputStream(f); gw.writeToStream(gexf, fos); URL schemaFile = new URL(builder.getSchemaUrl()); Source xmlFile = new StreamSource(f); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(schemaFile); Validator validator = schema.newValidator(); validator.validate(xmlFile); } }